<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    // Promise是异步编程的一种解决方案 比传统的解决方案 回调函数和事件 更合理和更强大
    // 它由社区最早提出和实现 ES6将其写进语言规范 统一了用法 原生提供了Promise对象

    // 所谓Promise 简单的说就是一个容器 里面保存着某个未来才会结束的事件 (通常是一个异步操作) 的结果
    // 从语法上说 Promise是一个对象 从它可以获取异步操作的消息
    // Promise提供统一的API 各种异步操作都可以用同样的方法进行处理

    // Promise对象有以下两个特点
    // 1.对象的状态不受外界影响 Promise对象代表一个异步操作 有以下三种状态 pending(进行中) fulfilled(已成功) rejected(已失败)
    // 只有异步操作的结果 可以决定当前是哪一种状态 任何其他操作都无法改变这个状态 这也是Promise这个名字的由来

    // 2.一旦状态改变 就不会再变 任何时候都可以得到这个结果
    // Promise对象的状态改变只有两种可能 从pending变为fulfilled 从pending变为rejected
    // 只要这两种情况发生 状态就凝固了 不会再变 会一直保持这个结果 这时就称为resolved (已定型)
    // 如果改变已经发生 你再对Promise对象添加回调函数 也会立即得到这个结果 
    // 这与事件(Event)完全不同 事件的特点是 如果你错过了它 再去监听 是得不到结果的

    // 有了Promise对象 就可以将异步操作以同步操作的流程表达出来 避免了层层嵌套的回调函数
    // 此外 Promise对象提供统一的接口 使得控制异步操作更加容易

    // Promise也有一些缺点 首先 无法取消Promise 一旦新建它就会立即执行 无法中途取消
    // 其次 如果不设置回调函数 Promise内部抛出的错误 不会反应到外部
    // 第三 当处于pending状态时 无法得知目前进展到哪一个阶段

    


</script>